1. Field of the Invention
The present invention relates to the field of distributed memory environments in object-oriented technology, and is directed to providing transparent access to data objects located in the memory address spaces of remote processors.
2. Description of the Related Art
The term "object" used herein refers to a package of data that is a representation of related information maintained in contiguous memory locations. In object-oriented technology, an object is a member of a class and has a defined set of operations that are permitted to be performed on the object and other objects that are members of the same class.
Distributed memory models are important in object-oriented languages such as C++ because they give the illusion of concurrency in performing multiple operations simultaneously.
Languages that inherently accommodate concurrency can be utilized in a shared memory environment where independent threads of control can be spun from the same memory environment.
For example, U.S. Pat. No. 5,075,842--Lai, and U.S. Pat. Nos. 5,075,845 and 5,075,848, both to Lai et al., are all addressed to a single address space in a paged memory, shared by a plurality of processors. An object table object located in the address space is accessible to processors on processor initialization and supports the processor in determining the addresses of data objects stored in the paged memory. These patents use the concept of "access descriptors" or protected pointers located in the address space as a security measure to limit access/modification to certain types of data objects in the absence of a properly implemented processor access mode.
By contrast to the shared memory model discussed above, in a distributed memory model, processors have exclusive access to their own local memories. Processors communicate by explicit messages, carried by communication subsystem. In most distributed memory machines, the message passing subsystem hides the actual underlying topology from the user, and allows messages to be addressed to arbitrary processors in the distributed memory environment.
The present invention is directed to homogeneous distributed memory parallel computers or computer clusters. These types of systems do not raise specific issues such as heterogeneity of data representation, fault tolerance, or name resolution that might be applicable in a larger distributed system. Nevertheless, the present invention would be adaptable to a larger distributed system with proper modification obvious to one skilled in the art.
In object-oriented languages like C++, a problem arises where one wishes to distribute objects among a group of processors having separate address spaces, and subsequently to reference objects that may be located on remote processors in the system. When an object resides in the memory of a processor, that processor may simply use the address of the object (i.e., a variable denoting that object's location in memory) to refer to it. However, simply passing that address to another processor in the system would be meaningless since the receiving processor has no way of knowing, from the bare address variable, that the address refers to a remote processors, and implicitly cannot know which other processor in the group to refer to in order to access the data object.
Instead, other processors must have some way of referring to an object that is remote, so that operations on the object may be forwarded to the processor where the object resides.
A number of solutions have been proposed to the problem of representing objects so that they may be referred to by remote processors in distributed memory environments. One proposal is the use of global identifiers, as described in A. Chatterjee, A. Khanna and Y. Hung, "ES/Kit: An Object Oriented Distributed System", Concurrency: Practice and Experience, Volume 3(6), 1991, pp. 525-539. In this reference, global identifiers used in place of object references when objects are referenced. However, these identifiers must be translated into local references each time they cross a node boundary. (It should be pointed out that the term "node" as used in this application refers to a location of local memory in a distributed memory environment. Nodes may or may not have processors separately associated with them, but for the purposes of the present application, it will be assumed that the term "node" is interchangeable with "processor" in distributed memory environment.)
Similarly, U.S. Pat. No. 5,117,350--Parrish et al., which provides for partitioning of local memory in nodes in a distributed memory system, requires translation through partition maps located at each local node memory in order to establish remote access to data objects in that local memory.
A different approach is to represent remote objects by "proxies". As described in M. Shapiro, "Structure and Encapsulation in Distributed Systems: The Proxy Principle", Proceedings of Sixth International Conference of Distributed Computer Systems, May 1986, pp. 198-204, proxies may be introduced as local representatives of remote objects. The proxies described in Shapiro are in many ways similar to the notion of a "stub" introduced as an interface between clients and services in B. J. Nelson, "Remote Procedure Call", Carnegie-Mellon University Report CMU-CS-81-119, May 1981. Proxies assist in providing local transparency in a system where objects are distributed across many nodes. They allow uniform invocation of methods, irrespective of their location. However, proxies alone are not sufficient to provide location transparency in the presence of dynamic object creation and migration.
The problem of maintaining a record of unrestricted object creation/destruction has only been addressed in the context of a single memory. For example, WO9300633--Hastings, describes a forward control index table containing a listing of offsets or code blocks for data items in memory, that may be updated if the location of data items is changed when further data has been inserted between the offsets in a data code file.
In J. S. Chase, et al., "The Amber System: Parallel Programming on a Network of Multiprocessors", Proceedings of the 12th ACM Symposium on Operating System Principles", 1989, pp. 147-158, a programming system called "Amber" is described that allows an application system to take advantage of multiprocessors. This system uses object descriptors (a similar notion to proxies), name servers and virtual space, to provide location transparency in the following way. The virtual address space on each node is identical, and is divided into regions, one region for each node in the network. All objects are allocated on all nodes, even though only one node actually holds the object. The remote nodes can use some of the otherwise unused space allocated for an object to contain object descriptors and other information. Program code and static data are replicated on all nodes at the same virtual addresses. Each node in the network also has a distinct region of the address space for allocating new objects. No node in the network would use the other nodes' region when it creates new nodes.
An Amber application is a collection of mobile objects that interact through location dependent method invocations. Object migration is entirely under the control of the programmer. Amber objects are passive (passive objects have no thread of control of their own), and their methods can be invoked locally or remotely. The active objects (objects with a thread of control) of the system are "thread" objects that are migrated to a node in the network where an object whose method has been invoked resides.
While the foregoing solution avoids address translation at processor boundaries, it raises the problem that large amounts of virtual space must be wasted through duplication of objects that reside on other nodes. Furthermore, to implement this approach, nodes are required to implement virtual memory. This cannot be accomplished consistently in distributed memory systems containing large numbers of simple processors that would not otherwise require virtual memory hardware.